package com.str.controller;

import com.str.annotation.PrintLog;
import com.str.dto.*;
import com.str.service.KitInfoService;
import com.str.utils.Retcode;
import com.str.vo.ResponseVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;

/**
 * 试剂盒(KitInfo)表控制层
 *
 * @author makejava
 * @since 2023-04-15 11:43:58
 */
@RestController
@RequestMapping("kitInfo")
@Slf4j
@Api(value = "系统数据展示API", tags = "系统数据展示API")
public class KitInfoController {
    /**
     * 服务对象
     */
    @Resource
    private KitInfoService kitInfoService;
    /**
     * 获取已存在的试剂盒名称集合
     * @return 查询结果
     */
    @ApiOperation("获取已存在的试剂盒名称集合")
    @PostMapping("/queryKitNameList")
    @PrintLog(desc = "获取已存在的试剂盒名称集合")
    public ResponseVO queryKitNameList(HttpServletRequest request) {
        return kitInfoService.queryKitNameList(request);
    }
    /**
     * 分页查询基因数据列表
     * @param dto 筛选条件
     * @return 查询结果
     */
    @ApiOperation("分页查询基因数据列表")
    @PostMapping("/queryKitInfoList")
    @PrintLog(desc = "分页查询基因数据列表")
    public ResponseVO queryKitInfoList(@RequestBody @Valid QueryKitInfoListDto dto, HttpServletRequest request) {
            return kitInfoService.queryKitInfoList(dto, request);
    }

    /**
     * 基因详情数据查询(编辑数据回显)
     * @param dto 筛选条件
     * @return 查询结果
     */
    @ApiOperation("基因详情数据查询(编辑数据回显)")
    @PostMapping("/queryDetailsKitInfo")
    @PrintLog(desc = "基因详情数据查询(编辑数据回显)")
    public ResponseVO queryDetailsKitInfo(@RequestBody @Valid QueryDetailsKitInfoDto dto, HttpServletRequest request) {
            return kitInfoService.queryDetailsKitInfo(dto, request);
    }
    /**
     * 基因详情数据查询(编辑数据回显)-根据基因座名称模糊查询等位基因、峰面积及其示例个体数据信息
     * @param dto 筛选条件
     * @return 查询结果
     */
    @ApiOperation("根据基因座名称模糊查询等位基因、峰面积及其示例个体数据信息")
    @PostMapping("/queryDataByLocusName")
    @PrintLog(desc = "根据基因座名称模糊查询等位基因、峰面积及其示例个体数据信息")
    public ResponseVO queryDataByLocusName(@RequestBody @Valid QueryDataByLocusNameDto dto, HttpServletRequest request) {
            return kitInfoService.queryDataByLocusName(dto, request);
    }
    /**
     * 新增、修改基因数据
     * @param dto 筛选条件
     * @return 查询结果
     */
    @ApiOperation("新增、修改基因数据")
    @PostMapping("/saveOrUpdateKitInfo")
    @PrintLog(desc = "新增、修改基因数据")
    public ResponseVO saveOrUpdateKitInfo(@RequestBody @Valid SaveOrUpdateKitInfoDto dto, HttpServletRequest request) {
            return kitInfoService.saveOrUpdateKitInfo(dto, request);
    }

    /**
     * 删除基因数据
     * @param dto 筛选条件
     * @return 查询结果
     */
    @ApiOperation("删除基因数据")
    @PostMapping("/deleteKitInfo")
    @PrintLog(desc = "删除基因数据")
    public ResponseVO deleteKitInfo(@RequestBody @Valid QueryDetailsKitInfoDto dto, HttpServletRequest request) {
            return kitInfoService.deleteKitInfo(dto, request);
    }

    /**
     * 导出基因数据
     * @param dto 筛选条件
     * @return 查询结果
     */
    @ApiOperation("导出基因数据")
    @PostMapping("/exportKitInfo")
    @PrintLog(desc = "导出基因数据")
    public ResponseVO exportKitInfo(@RequestBody @Valid ExportKitInfoDto dto, HttpServletRequest request, HttpServletResponse response) {
            return kitInfoService.exportKitInfo(dto, request,response);
    }
    /**
     * 导入基因数据
     * @param file 筛选条件
     * @return 查询结果
     */
    @ApiOperation("导入Excel基因数据")
    @PostMapping("/importKitInfo")
    @PrintLog(desc = "导入Excel基因数据")
    public ResponseVO importKitInfo(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
        try {
            return kitInfoService.importKitInfo(file, request);
        } catch (Exception e){
            log.error("导入Excel文档数据Exception", e);
            if (e.getClass().equals(RuntimeException.class)) {
                return new ResponseVO(Retcode.PARAM_ERROR.code(), String.format(e.getMessage()), null);
            }else if (e.getClass().equals(IllegalStateException.class)){
                log.error("IllegalStateException", e);
                return new ResponseVO(Retcode.PARAM_ERROR.code(), String.format(e.getMessage().substring(25,32)+"列存在单元格合并错误，导入失败！"), null);
            }else {
                return new ResponseVO(Retcode.PARAM_ERROR.code(), String.format("导入Excel文件存在未知异常信息，请联系系统管理员处理！"), null);
            }
        }
    }
}

